const { http } = require("./api/http");
const configManager = require("./utils/config-manager");
const { createMessageWindow, getMessageWindow } = require("./windows");
const config = configManager.getConfig();

// 定时器管理对象
const timers = {
  taskCheck: null,
  // 后续可以添加其他定时器
  // otherTimer: null,
};

/**
 * 调用评价任务列表API
 * @returns {Promise<Object>} API响应数据
 */
async function getEvaluateTaskList() {
  const url = `${config.serverInfo.url}/api/evaluateTask/getEvaluateTaskList`;

  const response = await http.post(`${url}`);
  return response.data;
}

/**
 * 检查是否有新任务(未结束的任务)
 * @returns {Promise<boolean>} 是否有任务
 */
async function checkForTasks() {
  try {
    const response = await getEvaluateTaskList();
    let taskList = [];
    if (response && response.list && Array.isArray(response.list)) {
      taskList = response.list;
    } else if (response && Array.isArray(response)) {
      taskList = response;
    }
    const task = taskList.find(
      (item) =>
        item.expertList.some((expert) => expert.id === config.expertInfo.id) &&
        item.execStatus < 3
    );
    return task ? task : null;
  } catch (error) {
    console.error("检查任务时发生错误:", error);
    return null;
  }
}

/**
 * 检查任务并通知或取消通知
 */
async function checkTasksAndNotify() {
  try {
    const task = await checkForTasks();

    if (task) {
      console.log("发现新任务，显示通知弹框");

      // 创建消息弹框
      createMessageWindow({
        title: "评价任务提醒",
        message: "您有新的评价任务需要处理，请及时处理",
        teacherName: config.expertInfo.userName,
        data: {
          url: `${config.frontInfo.url}/expert-evaluate?taskId=${task.id}&templateId=${task.templateId}&expertId=${config.expertInfo.id}`,
        },
      });
    } else {
      console.log("暂无新任务");
      const messageWindow = getMessageWindow();
      if (messageWindow && !messageWindow.isDestroyed()) {
        messageWindow.close();
      }
    }
  } catch (error) {
    console.error("检查任务时发生错误:", error);
  }
}

/**
 * 启动任务监控定时器
 * @param {number} interval - 检查间隔时间（毫秒），默认3秒
 */
function startTaskMonitoring(interval = 3000) {
  console.log("开始监控任务...");

  // 如果已有定时器在运行，先停止
  stopTaskMonitoring();

  // 立即执行一次检查
  checkTasksAndNotify();

  // 设置定时器
  timers.taskCheck = setInterval(() => {
    checkTasksAndNotify();
  }, interval);

  console.log(`任务监控已启动，检查间隔：${interval}ms`);
}

/**
 * 停止任务监控定时器
 */
function stopTaskMonitoring() {
  if (timers.taskCheck) {
    clearInterval(timers.taskCheck);
    timers.taskCheck = null;
    console.log("任务监控已停止");
  }
}

/**
 * 获取定时器状态
 * @param {string} timerName - 定时器名称
 * @returns {boolean} 定时器是否在运行
 */
function isTimerRunning(timerName) {
  return timers[timerName] !== null;
}

/**
 * 停止所有定时器
 */
function stopAllTimers() {
  Object.keys(timers).forEach((timerName) => {
    if (timers[timerName]) {
      clearInterval(timers[timerName]);
      timers[timerName] = null;
      console.log(`定时器 ${timerName} 已停止`);
    }
  });
  console.log("所有定时器已停止");
}

module.exports = {
  getEvaluateTaskList,
  checkForTasks,
  checkTasksAndNotify,
  startTaskMonitoring,
  stopTaskMonitoring,
  isTimerRunning,
  stopAllTimers,
};
